#include <stdio.h>
#include "../include/stack.h"

typedef struct node_s {
	int a;
	stack_t stack;
} node_t;

#define N 5

void check_stack() {
	stack_t head;
	stack_t * p;
	node_t nodes[N];
	node_t * pnode;
	int i = 0;
	
	init_head(stack_t, &head);
	for (i = 0; i < N; ++i) {
		nodes[i].a = i+1;
	}
	
	for (i = 0; i < N; ++i) {
		if (stack_is_exist(&head, &nodes[i].stack)) {
			printf("wrong:stack_is_exist\n");
			return ;
		}
		stack_push(&head, &nodes[i].stack);
		stack_push(&head, &nodes[i].stack);
		if (!stack_is_exist(&head, &nodes[i].stack)) {
			printf("wrong:stack_is_exist\n");
			return ;
		}
	}
	printf("right:stack_is_exist\n");

	for(i = N; (p = stack_pop(&head)) != NULL; --i ) {
		pnode = entry(p, node_t, stack);
		if (i != pnode->a) {
			printf("wrong: stack\n");	
			return ;
		}	
		printf("%d ", pnode->a);
	}	
	printf("right: stack\n");
	stack_empty(&head);
	if (stack_is_empty(&head)) {
		printf("right: stack_empty\n");
	}
	else {
		printf("wrong: stack_empty\n");
	}
}

int main(int argc, char * argv[]) {
	check_stack();
	return 0;	
}
